home *** CD-ROM | disk | FTP | other *** search
/ SGI Developer Toolbox 6.1 / SGI Developer Toolbox 6.1 - Disc 2.iso / bin / mimecapper < prev    next >
Text File  |  1996-11-11  |  6KB  |  242 lines

  1. #!/bin/perl
  2. $ENV{'PATH'} = "/usr/bsd:/bin/:/usr/bin:/usr/sbin:/usr/bin/X11";
  3.  
  4. #
  5. # get and set necessary locations and variables
  6. #
  7.  
  8. $userHome   = $ENV{"HOME"} ;
  9. if ($userHome eq "/") {
  10.     $userHome = "";
  11. }
  12. $DT_utilities = $ENV{"DT_utilities"} ;
  13. chdir($DT_utilities) || die "unable to cd to $DT_utilities\n";
  14. $DT_xconfirm = "$DT_utilities/DT_xconfirm";
  15. $prefFile   = ".netscape-preferences" ;
  16. $success = 1;
  17. $failure = 0;
  18. $f = "$DT_utilities/.DT_Version";
  19. (-f $f ? `cat $f` : 0 ) =~ /(\d+)/;
  20. $version = $1;
  21. $DT_head_pattern = "#-- DT_utilities Compliant File ";
  22. $DT_end_marker = "#-- End of all DT_utilities stuff ----";
  23.  
  24. sub path_report {
  25.     local($msg, $path) = @_;
  26.     local($sh_path);
  27.     $sh_path = $path =~ /^$userHome\/(.*)/ ? "\$HOME/$1" : $path;
  28.     print STDERR "$msg ($sh_path)\n";
  29. }
  30.  
  31. #
  32. # routine to read preference file
  33. #
  34.  
  35. sub read_prefFile {
  36.     while (<PREF>) {
  37.         next if /^#/;
  38.         next if /^[     ]*$/;
  39.         next unless /^([^:]*):[ \t]*(.*)[ \t\n]*$/;
  40.         $prefs{$1} = $2;
  41.  
  42.     }
  43.     close(PREF);
  44. }
  45.  
  46. #
  47. # routine to write preference file
  48. #
  49.  
  50. sub write_prefFile {
  51.     while (($key,$value) = each %prefs) {
  52.         print PREF "$key:    $value\n";
  53.     }
  54.     close(PREF);
  55. }
  56.  
  57. #
  58. # routines to read/delete/append/write mimetype and mailcap files
  59. #
  60.  
  61. $same    = 0;
  62. $add     = 1;
  63. $delete  = 2;
  64. $changed = 3;
  65.  
  66. sub read_file {
  67.     local($filename, $dflt_filename, $file_type) = @_;
  68.     $xfilename = $filename;
  69.     $xfile_type = $file_type;
  70.     $file_change = $same;
  71.     $do_ask = 1;
  72.     if (!open(IN, "$filename")) {
  73.         open(IN, "$dflt_filename") || 
  74.             die "Unable to open $dflt_filename\n";
  75.         $file_change = $file_change | $add;
  76.         $do_ask = 0;
  77.         &path_report("Creating $file_type file", $filename);
  78.     }
  79.     @file = <IN>;
  80.     close(IN);
  81. }
  82.  
  83. sub delete_stuff {
  84.     local($front, $back) = @_;
  85.     local($i, $j, $num_del);
  86.     for ($i=0; $i <= $#file; ++$i) {last if $file[$i] =~ /^$front/;}
  87.     return ($failure) unless $i <= $#file;
  88.     while ($file[$i] =~ /^#/) {
  89.         $file_change = $file_change | $delete;
  90.         return ($success) if splice(@file, $i, 1) =~ /^$back/;
  91.     }
  92.     for ($j=$i; $j <= $#file; ++$j) {last if $file[$j] =~ /^$back/;}
  93.     return ($success) unless $j <= $#file;
  94.     splice(@file, $i, $j - $i + 1);
  95.     $file_change = $file_change | $delete;
  96.     return ($success);
  97. }
  98.  
  99. sub get_file_version {
  100.     for (@file) {
  101.         next unless /^$DT_head_pattern V. (\d+)/;
  102.         return($1);
  103.     }
  104.     return(0);
  105. }
  106.  
  107. sub append_stuff {
  108.     local($filename, $description) = @_;
  109.     return($failure) unless open(IN, "$filename");
  110.     push(@file, "#\n#-- DT_utilities - $description ----\n#\n");
  111.     $file_change = $file_change | $add;
  112.     push(@file, <IN>);
  113.     close(IN);
  114.     return($success);
  115. }
  116.  
  117. sub write_file {
  118.     local($do_backup, $act, $to, $msg, $f);
  119.     return($success) unless $file_change;
  120.     $f = "${xfilename}.bak";
  121.     if (! -f $xfilename) {
  122.         $do_backup = 0;
  123.         undef $backup;
  124.     } elsif (-f $f) {
  125.         $do_backup = 0;
  126.         $backup = "$f exists so no backup will be done.\n\n";
  127.     } else {
  128.         $do_backup = 1;
  129.         $backup  = "The original file will be also saved as:\n";
  130.         $backup .= "${f}.\n\n";
  131.     }
  132.     if ($file_change == $add) {
  133.         $act = "add";
  134.         $to     = "to";
  135.     } elsif ($file_change == $delete) {
  136.         $act = "delete";
  137.         $to     = "from";
  138.     } else {
  139.         $act = "change";
  140.         $to     = "of";
  141.     }
  142.     if ($do_ask) {
  143.         $msg  = "In order for Toolbox related tasks to work properly, ";
  144.         $msg .= "it is necessary to $act a few lines $to:\n";
  145.         $msg .= "${xfilename}.\n\n$backup";
  146.         $msg .= "Should I modify the file?\n\n";
  147.         $msg .= "Note: Without these $xfile_type entries, ";
  148.         $msg .= "certain things will likely not work as intended.";
  149.         $reply = `$DT_xconfirm yesno "$msg"`;
  150.  
  151.         chop($reply);
  152.         return($failure) if $reply eq "No";
  153.     }
  154.  
  155.     # save the original just in case
  156.     system("/usr/bin/cp  $xfilename ${xfilename}.bak") if $do_backup;
  157.  
  158.     open(OUT, ">$xfilename") || die "Unable to write $xfilename\n";
  159.     for (@file) {print OUT;}
  160.     return($success);
  161. }
  162.  
  163. # handle all DT actions to a file
  164. sub do_file {
  165.     local($filename, $dflt_filename, $file_type, $file) = @_;
  166.     local($f);
  167.  
  168.     &read_file($filename, $dflt_filename, $file_type);
  169.     &delete_stuff("#--FCD96_TOOLBOX_Compliant_File----", 
  170.         "#--End of TOOLBOX_SPECIFIC_THINGS");
  171.     &delete_stuff("#--TOOLBOX_Compliant_File----", 
  172.         "#--End of TOOLBOX_SPECIFIC_THINGS");
  173.     if (&get_file_version() < $version) {
  174.         &delete_stuff($DT_head_pattern, $DT_end_marker);
  175.         push(@file, "\n$DT_head_pattern V. $version ----\n");
  176.         push(@file, 
  177.             "# Do not delete the above line or the end line.\n");
  178.         push(@file, "# DT_utlities uses them to know its stuff.\n");
  179.         &append_stuff($file, "main stuff");
  180.         opendir(DIR, ".") || die "Unable to read current directory\n";
  181.         for $dir (readdir(DIR)) {
  182.             next unless -d $dir;
  183.             next if $dir =~ /^\.{1,2}$/;
  184.             $f = "$dir/$file";
  185.             &append_stuff($f, "$dir helper stuff");
  186.         }
  187.         closedir(DIR);
  188.         push(@file, "#\n$DT_end_marker\n");
  189.     }
  190.     &write_file();
  191. }
  192.  
  193.  
  194. #
  195. # see if the user has a .netscape-preferences file in home dir
  196. # if not, create one for the user from our template
  197. #
  198.  
  199. if ( -e "$userHome/$prefFile") {
  200.     open (PREF, "$userHome/$prefFile");
  201.     &read_prefFile;
  202. } else {
  203.  
  204.     &path_report("Creating Netscape preference file","$userHome/$prefFile");
  205.     $f = "$DT_utilities/netscape-preferences";
  206.     open(PREF, $f) || die "Template preferences file ($f) missing\n";
  207.     &read_prefFile;
  208.  
  209.     # modify whatever is user specific
  210.     $prefs{"CACHE_DIR"}           = "$userHome/.netscape-cache";
  211.     $prefs{"BOOKMARKS_FILE"}      = "$userHome/.netscape-bookmarks.html";
  212.     $prefs{"HISTORY_FILE"}        = "$userHome/.netscape-history";
  213.     $prefs{"NEWSRC_DIR"}          = "$userHome/";
  214.     $prefs{"PERSONAL_MAILCAP"}    = "$userHome/.mailcap";
  215.     $prefs{"PERSONAL_MIME_TYPES"} = "$userHome/.mime.types";
  216.     $prefs{"SIGNATURE_FILE"}      = "$userHome/.signature";
  217.  
  218.     # and write it out
  219.     $f = "$userHome/$prefFile";
  220.     if (!(open (PREF, ">$f"))) {
  221.         &path_report("Unable to write preferences file", $f);
  222.         exit ($failure);
  223.     }
  224.     &write_prefFile;
  225. }
  226.  
  227. #
  228. # adjust user mimetype file
  229. #
  230.  
  231. &do_file($prefs{"PERSONAL_MIME_TYPES"}, "$DT_utilities/mime.types", 
  232.     "mime-type", "tb_mime.types");
  233.  
  234. #
  235. # adjust user mailcap file
  236. #
  237.  
  238. &do_file($prefs{"PERSONAL_MAILCAP"}, "$DT_utilities/mailcap", 
  239.     "mailcap", "tb_mailcap");
  240.  
  241. exit ($success);
  242.